#ifndef EDGE_H
#define EDGE_H

#include <set>
#include <iostream>

#include "halfEdge.h"
#include "vertex.h"
#include "color.h"

class Edge{
    public:
        Edge(int = 0, HalfEdge * = NULL, HalfEdge * = NULL);
        ~Edge();

        int getId() const {return id;};
        void setId(int _id) {id = _id;};

        bool isSelected() const {return selected;};
        void select(bool _b) {selected = _b;};

        HalfEdge *getHE1() const {return he1;};
        void setHE1(HalfEdge *_he) {he1 = _he;};

        HalfEdge *getHE2() const {return he2;};
        void setHE2(HalfEdge *_he) {he2 = _he;};

        void setHE(HalfEdge *_he1, HalfEdge *_he2) {he1 = _he1; he2 = _he2;};

//        void translate(const Vector3D &);
        std::set<Vertex *> getVertices();
        void setColor(const Color &_color);
        void draw() const;

        void selectAdjacentVertex();
        void selectAdjacentEdge();
        void selectAdjacentFace();

    private:
        int id;
        bool selected;
        HalfEdge *he1, *he2;
};

#endif
